/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package co.edu.udistrital.conce.presentacion.util;

import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;

/**
 *
 * @author NETinfo - AlejoGB
 */
public class DateUtil {
    /**
     * Format: yyyyMMdd
     */
    public final static String FORMAT1   = "yyyyMMdd";
    /**
     * Format: dd/MM/yyyy
     */
    public final static String FORMAT2  = "dd/MM/yyyy";
/**
     * Format: ddMMyyyy
     */
    public final static String FORMAT3  = "ddMMyyyy";

    /**
     * Format: HH:mm
     */
    public final static String FORMAT4 = "HH:mm";
    /**
	 * Si el dia es no hábil, retorna el siguiente dia hábil a la fecha, de lo
	 * contrario retorna la misma fecha dando el formato de entrada y de salida
	 * de la fecha.
	 * @param date: Fecha a evaluar: yyyyMMdd
	 * @param formatOut: Formato de salida del a fecha hábil.
	 * @return
	 */
	public static String isWorkDay(String date, String formatOut){
		SimpleDateFormat sdfOut = new SimpleDateFormat(formatOut);
		Calendar c = Calendar.getInstance();
		int year = Integer.parseInt(date.substring(0, 4));
		int dayI = Integer.parseInt(date.substring(6, 8));
		int month = Integer.parseInt(date.substring(4, 6))-1;
        c.set(year,month,dayI);
        int day = c.get(Calendar.DAY_OF_WEEK);
        if ( day == Calendar.SUNDAY ){
        	c.set(year, month, dayI+1);
        	return sdfOut.format(c.getTime());
        }
        else if ( day == Calendar.SATURDAY ){
        	c.set(year, month, dayI+2);
        	return sdfOut.format(c.getTime());
        }
        else{
        	return sdfOut.format(c.getTime());
        }
	}

    /**
     * Metodo que retorna la fecha con el formato indicado
     * @param date: Fecha a evaluar: yyyyMMdd
     * @param formatOut
     * @return fecha formateada.
     */
    public static String formatDate(String fecha, String formatOut) {
        if ( fecha!=null && fecha.length()>=8 ){
            SimpleDateFormat sdf = null;
            Calendar c = Calendar.getInstance();
            sdf = new SimpleDateFormat(formatOut);
            c.set(Integer.parseInt(fecha.substring(0, 4)),Integer.parseInt(fecha.substring(4, 6))-1,Integer.parseInt(fecha.substring(6, 8)));
            return sdf.format(c.getTime());
        }
        else{
            return fecha;
        }
    }

    public static String formatDate(Date fecha, String formatOut) {
        SimpleDateFormat sdf = null;
        Calendar c = Calendar.getInstance();
        c.setTime(fecha);
        sdf = new SimpleDateFormat(formatOut);
        return sdf.format(c.getTime());
    }

    /**
     * Metodo que retorna la fecha con el formato indicado
     * @param date: Fecha a evaluar: ddMMyyyy
     * @param formatOut
     * @return fecha formateada.
     */
    public static String formatDate2(String fecha, String formatOut) {
        if ( fecha!=null && fecha.length()>=8 ){
            SimpleDateFormat sdf = null;
            Calendar c = Calendar.getInstance();
            sdf = new SimpleDateFormat(formatOut);
            c.set(Integer.parseInt(fecha.substring(4, 8)),Integer.parseInt(fecha.substring(2, 4))-1,Integer.parseInt(fecha.substring(0, 2)));
            return sdf.format(c.getTime());
        }
        else{
            return fecha;
        }
    }

    /**
     * Retorna la fecha actual en el formato indicado
     * @param formatOut
     * @return
     */
    public static String getDateNow(String formatOut) {
        SimpleDateFormat sdf = new SimpleDateFormat(formatOut);
        Calendar c = Calendar.getInstance();
        return sdf.format(c.getTime());
    }

    /**
     * Retorna la fecha actual en el formato indicado
     * @param formatOut
     * @return
     */
//    public static String getDateSystem(String formatOut) {
//        SimpleDateFormat sdf = new SimpleDateFormat(formatOut);
//        return sdf.format(Calendar.getInstance().getTime());
//    }

}
